package cl.ncx.cmvrc.persistence.jpa.admin.entities;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import cl.ncx.cmvrc.util.Utils;

/**
 * SeguPerfil entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "segu_perfil", schema = "seguridad")
@SequenceGenerator(name = "segu_perfil_seq", sequenceName = "seguridad.segu_perfil_perf_codigo_seq")
public class SeguPerfil implements java.io.Serializable {

	// Fields

	private static final long serialVersionUID = 8186302612316791611L;
	private Long perfCodigo;
	private String perfNombre;
	private Date perfFechaInicioVigencia;
	private Date perfFechaTerminoVigencia;
	private Integer perfOrden;
	private Set<SeguMenuPerfil> seguMenuPerfils = new HashSet<SeguMenuPerfil>(0);
	private Set<SeguUsuarioPerfil> seguUsuarioPerfils = new HashSet<SeguUsuarioPerfil>(
			0);

	// Constructors

	/** default constructor */
	public SeguPerfil() {
	}

	/** minimal constructor */
	public SeguPerfil(Long perfCodigo, String perfNombre) {
		this.perfCodigo = perfCodigo;
		this.perfNombre = perfNombre;
	}

	/** full constructor */
	public SeguPerfil(Long perfCodigo, String perfNombre,
			Date perfFechaInicioVigencia, Date perfFechaTerminoVigencia,
			Set<SeguMenuPerfil> seguMenuPerfils,
			Set<SeguUsuarioPerfil> seguUsuarioPerfils) {
		this.perfCodigo = perfCodigo;
		this.perfNombre = perfNombre;
		this.perfFechaInicioVigencia = perfFechaInicioVigencia;
		this.perfFechaTerminoVigencia = perfFechaTerminoVigencia;
		this.seguMenuPerfils = seguMenuPerfils;
		this.seguUsuarioPerfils = seguUsuarioPerfils;
	}

	// Property accessors
	@Id
	@Column(name = "perf_codigo", unique = true, nullable = false)
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "segu_perfil_seq")
	public Long getPerfCodigo() {
		return this.perfCodigo;
	}

	public void setPerfCodigo(Long perfCodigo) {
		this.perfCodigo = perfCodigo;
	}

	@Column(name = "perf_nombre", nullable = false, length = 100)
	public String getPerfNombre() {
		return Utils.replaceSpecialChars(this.perfNombre);
	}

	public void setPerfNombre(String perfNombre) {
		this.perfNombre = perfNombre;
	}

	@Temporal(TemporalType.DATE)
	@Column(name = "perf_fecha_inicio_vigencia", length = 13)
	public Date getPerfFechaInicioVigencia() {
		return this.perfFechaInicioVigencia;
	}

	public void setPerfFechaInicioVigencia(Date perfFechaInicioVigencia) {
		this.perfFechaInicioVigencia = perfFechaInicioVigencia;
	}

	@Temporal(TemporalType.DATE)
	@Column(name = "perf_fecha_termino_vigencia", length = 13)
	public Date getPerfFechaTerminoVigencia() {
		return this.perfFechaTerminoVigencia;
	}

	public void setPerfFechaTerminoVigencia(Date perfFechaTerminoVigencia) {
		this.perfFechaTerminoVigencia = perfFechaTerminoVigencia;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "seguPerfil")
	public Set<SeguMenuPerfil> getSeguMenuPerfils() {
		return this.seguMenuPerfils;
	}

	public void setSeguMenuPerfils(Set<SeguMenuPerfil> seguMenuPerfils) {
		this.seguMenuPerfils = seguMenuPerfils;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "seguPerfil")
	public Set<SeguUsuarioPerfil> getSeguUsuarioPerfils() {
		return this.seguUsuarioPerfils;
	}

	public void setSeguUsuarioPerfils(Set<SeguUsuarioPerfil> seguUsuarioPerfils) {
		this.seguUsuarioPerfils = seguUsuarioPerfils;
	}
	@Column(name = "perf_orden")
	public Integer getPerfOrden() {
		return perfOrden;
	}

	public void setPerfOrden(Integer perfOrden) {
		this.perfOrden = perfOrden;
	}

}